function plot_subcarrier_allocation(user_subcarriers, num_subcarriers, num_users)
% plot_subcarrier_allocation - 绘制OFDMA系统中的子载波分配
%
% 输入参数:
%   user_subcarriers - 元胞数组，每个元素包含分配给一个用户的子载波索引
%   num_subcarriers  - 系统总子载波数
%   num_users        - 用户数量

% 创建图形
figure('Name', 'OFDMA子载波分配', 'Position', [100, 100, 1200, 400]);

% 创建子载波分配向量
allocation = zeros(1, num_subcarriers);

% 为每个用户分配的子载波设置不同的值
for user = 1:num_users
    subcarrier_indices = user_subcarriers{user};
    allocation(subcarrier_indices) = user;
end

% 使用离散颜色图显示分配
subplot(2, 1, 1);
imagesc(1:num_subcarriers, 1, allocation);
colormap(jet(num_users+1));
colorbar('Ticks', 0:num_users, 'TickLabels', ['未分配', arrayfun(@(x) ['用户 ' num2str(x)], 1:num_users, 'UniformOutput', false)]);
title('子载波分配');
xlabel('子载波索引');
ylabel('分配');
grid on;

% 计算每个用户的子载波数量
user_subcarrier_counts = zeros(1, num_users);
for user = 1:num_users
    user_subcarrier_counts(user) = length(user_subcarriers{user});
end

% 绘制每个用户的子载波数量柱状图
subplot(2, 1, 2);
bar(user_subcarrier_counts, 'FaceColor', 'flat');
for user = 1:num_users
    b = bar(user, user_subcarrier_counts(user));
    cmap = jet(num_users+1);
    b.FaceColor = cmap(user+1,:);
end
title('各用户子载波数量');
xlabel('用户索引');
ylabel('子载波数量');
grid on;
xticks(1:num_users);
xlim([0.5, num_users+0.5]);

% 添加总标题
sgtitle('OFDMA子载波分配');

end 